#ifndef AGENTBODY_H
#define AGENTBODY_H

#include "Environment/AbstractMobileObject.hpp"
#include "Influences/Influence.h"
#include "Tools/Tools.h"
#include "Perceptions/Perception.hpp"

#include <vector>

class Agent;

class AgentBody : public AbstractMobileObject{
protected:
    Agent* m_agent;
    Influence* m_motionInfluence;
    std::vector<Perception*> m_objectsPerceived;

public:
    AgentBody(Agent* a,double mla,double maa) :
        m_agent(a),
        m_motionInfluence(NULL),
        AbstractMobileObject(mla, maa){}
    // bool operator==(AgentBody& a){ return (this->m_agent == a.m_agent); }
    inline Agent* getAgent(){return m_agent;}
    virtual ~AgentBody();
    void removeInfluence();
    inline Influence* getInfluence(){return m_motionInfluence;}
    void influence(Vector2D*,double);
    bool exist();
    void setObjectsPerceived(std::vector<Perception*> objPerceived);
    std::vector<Perception*> getObjectsPerceived();
};

#endif // AGENTBODY_H
